package model;

import java.util.Iterator;
import java.util.LinkedList;

public class TorreDeControl {

	Mapa mapa;
	
	public TorreDeControl () {
		this.mapa = Mapa.getMapa();
	}
	
	public boolean hayNavesEnVuelo() {
		
		//Si la lista de naves NO está vacía
		return !(mapa.naves.isEmpty());
		//return true;
	}

	public int cantidadDeNaves() {
		
		return mapa.getCantidadDeNaves();
	} 
	
	public Mapa getMapa(){
		
		return this.mapa;
		
	}
	
	private boolean evaluarDimesiones(Posicion unaPosicion,	Posicion otraPosicion, Nave unaNave, Nave otraNave) {
		
		return (((unaPosicion.getX()+(unaNave.getAncho()/2)) == (otraPosicion.getX()-(otraNave.getAncho()/2))) ||
				  ((unaPosicion.getX()-(unaNave.getAncho()/2)) == (otraPosicion.getX()+(otraNave.getAncho()/2))) ||
					((unaPosicion.getY()+(unaNave.getAlto()/2)) == (otraPosicion.getY()-(otraNave.getAlto()/2))) ||
					  ((unaPosicion.getY()-(unaNave.getAlto()/2)) == (otraPosicion.getY()+(otraNave.getAlto()/2))));
		
	}	
	
	public void permitirAterrizajes() {
		
		LinkedList<Nave> listaDeNaves = this.getMapa().getNaves();
		Iterator<Nave> itNave = listaDeNaves.iterator();
		
		while (itNave.hasNext()) {
			Nave unaNave = itNave.next();
			LinkedList<EspacioDeAterrizaje> listaDePistas = this.getMapa().getPistas();
			Iterator<EspacioDeAterrizaje> itPistas = listaDePistas.iterator();
			
			while (itPistas.hasNext()) {
				EspacioDeAterrizaje unaPista = itPistas.next();
				unaPista.aterrizar(unaNave);
			}
		}
		
	}
		
	
	
	public boolean hayUnaColision() {
		
		LinkedList<Nave> listaDeNaves = this.getMapa().getNaves();
		boolean hayColision = false;
		

		Iterator<Nave> it = listaDeNaves.iterator();
		
		while (!(hayColision) && (it.hasNext())) {
			Nave unaNave = it.next();
			Posicion unaPosicion = unaNave.getPosicion();
			
			//Pido un nuevo iterador para realizar las comparaciones
			LinkedList<Nave> listaDeNavesAuxiliar = this.getMapa().getNaves();
			Iterator<Nave> it2 = listaDeNavesAuxiliar.iterator();
			
			while (!(hayColision) && (it2.hasNext())) {
				Nave otraNave = it2.next();
				Posicion otraPosicion = otraNave.getPosicion();
				
				/* Si es el mismo elemento y hay elementos
				 * pido el siguiente, de esta manera evito 
				 * evito que se compare consigo mismo*/
				if ((unaNave.equals(otraNave)) && (it2.hasNext())) {
					otraNave = it2.next();
					otraPosicion = otraNave.getPosicion();
					
				}	
				
				//evalua los bordes del avion
				if (this.evaluarDimesiones(unaPosicion, otraPosicion, unaNave, otraNave) && !(unaNave.equals(otraNave)))
					hayColision = true;
							
			}
		
		}
				
		return hayColision;
			
	}


}
